const puppeteer = require('puppeteer');

(async () => {
    // 格力加班地址
    const url = 'http://10.40.40.40/OTApply/login.aspx';

    // 个人信息
    const USER_INFO = {
        id: '167577',
        userName: '180300',
        pasword: 'fuchao!23',
    }

    // 加班参数信息
    const WORK_OPTIONS = {
        // 加班类型
        ddlOtType: '假日加班',

        // 加班性质
        ddlOTProperty: '跟进生产',

        // 科室班组
        ddlSubDept: 42, // 软件开发一室

        // 加班类型
        ddlOTDutyType: '白班', // 上班类型

        // 是否选择调休
        iptIsEHoliday: '是',

        // 加班理由
        txtOtContent: '销售渠道系统bug修复',

        // 加班开始时间
        iptStartTime: '17:30',

        // 加班结束时间
        iptEndTime: '19:30',

        // 时间证实人
        txtTimeProvePerson: '马晓霜',

        // 科室审批人
        iptCensorL2: '018423', // 018432:陈长安 018423:马晓霜

        // 部门审批人
        ddlDeptApprovePerson: '003814', // 003814:张俊杰 007537:李润静
    }
    try {
        console.log('ヾ(๑╹◡╹)ﾉ" 正在访问目标地址....');
        const browser = await puppeteer.launch({
            // headless: false
        });
        const page = await browser.newPage();
        await page.goto(url, {
            timeout: 300000
        });
        // 输入用户名，密码
        await page.type('#txtLoginID', USER_INFO.userName, {
            delay: 0
        });
        await page.type('#txtPassword', USER_INFO.pasword, {
            delay: 0
        });
        // 模拟回车
        await page.keyboard.press('Enter');
        await page.waitForNavigation();

        // 获取左边菜单 iframe
        const menusIframe = await page.frames().find(f => f.name() == 'frmLeft');

        // 模拟点击加班
        await menusIframe.click(`tr a[href*='OTApply.aspx']`);
        await page.waitFor(2000);

         // 获取右边 mainIframe
         const mainIframe = await page.frames().find(f => f.name() == 'frmWorkSpace');

        // 输入工号
        await mainIframe.type('#txtEmployeeNo', USER_INFO.id);

        // 读取用户信息
        await mainIframe.click('#btnGetEmpInfo');
        await page.waitFor(2000);

        // 填写加班类型 ddlOtType
        await mainIframe.$eval('#ddlOtType', (target, WORK_OPTIONS) => {
            Array.from(target.options).forEach(option => {
                if (option.value == WORK_OPTIONS.ddlOtType) {
                    option.selected = true;
                    return;
                }
            })
        }, WORK_OPTIONS);

        // 填写加班性质 ddlOTProperty
        await mainIframe.$eval('#ddlOTProperty', (target, WORK_OPTIONS) => {
            Array.from(target.options).forEach(option => {
                if (option.value == WORK_OPTIONS.ddlOTProperty) {
                    option.selected = true;
                    return;
                }
            })
        }, WORK_OPTIONS);

        // 填写科室 ddlSubDept
        await mainIframe.$eval('#ddlSubDept', (target, WORK_OPTIONS) => {
            Array.from(target.options).forEach(option => {
                if (option.value == WORK_OPTIONS.ddlSubDept) {
                    option.selected = true;
                    return;
                }
            })
        }, WORK_OPTIONS);

        // 上班类型 ddlOTDutyType
        await mainIframe.$eval('#ddlOTDutyType', (target, WORK_OPTIONS) => {
            Array.from(target.options).forEach(option => {
                if (option.value == WORK_OPTIONS.ddlOTDutyType) {
                    option.selected = true;
                    return;
                }
            })
        }, WORK_OPTIONS);

        // 是否调休 iptIsEHoliday
        await mainIframe.$eval('#iptIsEHoliday', (target, WORK_OPTIONS) => {
            Array.from(target.options).forEach(option => {
                if (option.value == WORK_OPTIONS.iptIsEHoliday) {
                    option.selected = true;
                    return;
                }
            })
        }, WORK_OPTIONS);

        // 加班理由 txtOtContent
        await mainIframe.type('#txtOtContent', WORK_OPTIONS.txtOtContent);

        // // 开始时间 默认 17:30 如需改动，可修改WORK_OPTIONS，并去掉注释
        // await mainIframe.$eval('#iptStartTime', (target, WORK_OPTIONS) => {
        //     Array.from(target.options).forEach(option => {
        //         if (option.value == WORK_OPTIONS.iptStartTime) {
        //             option.selected = true;
        //             return;
        //         }
        //     })
        // }, WORK_OPTIONS);


        // 结束时间 iptEndTime 19:30
        await mainIframe.$eval('#iptEndTime', (target, WORK_OPTIONS) => {
            Array.from(target.options).forEach(option => {
                if (option.value == WORK_OPTIONS.iptEndTime) {
                    option.selected = true;
                    return;
                }
            })
        }, WORK_OPTIONS);

        // 时间证实人 txtTimeProvePerson
        await mainIframe.type('#txtTimeProvePerson', WORK_OPTIONS.txtTimeProvePerson);

        // 科室审批人 iptCensorL2
        await mainIframe.$eval('#iptCensorL2', (target, WORK_OPTIONS) => {
            Array.from(target.options).forEach(option => {
                if (option.value == WORK_OPTIONS.iptCensorL2) {
                    option.selected = true;
                    return;
                }
            })
        }, WORK_OPTIONS);

        // 部门审批人 ddlDeptApprovePerson 003814/张俊杰
        await mainIframe.$eval('#ddlDeptApprovePerson', (target, WORK_OPTIONS) => {
            Array.from(target.options).forEach(option => {
                if (option.value == WORK_OPTIONS.ddlDeptApprovePerson) {
                    option.selected = true;
                    return;
                }
            })
        }, WORK_OPTIONS);

        // 申请、保存 btnSave
        await mainIframe.click('#btnSave');
        await browser.close();
        console.log('\r\n 加班成功~ o(*￣▽￣*)ブ)');

    } catch (error) {
        console.log(`错误${error}`);
    }
})();